package gatperdut.chato.core.handler.item.template;

import gatperdut.chato.core.ChatoServer;
import gatperdut.chato.model.Chato.Container.ItemTemplateContainer;
import gatperdut.chato.model.Chato.Item.ItemFactory;
import gatperdut.chato.model.Chato.Item.ItemTemplate;

import java.util.ArrayList;
import java.util.List;

public class ItemTemplateHandler {

    private final ChatoServer chatoServer;

    private final ItemTemplateContainer itemTemplateContainer;

    public ItemTemplateHandler( ChatoServer chatoServer, ItemTemplateContainer itemTemplateContainer ) {
        this.chatoServer = chatoServer;
        this.itemTemplateContainer = itemTemplateContainer;
    }

    public ItemTemplate findByHashCode( int code ) {
        List<ItemTemplate> its = getItemTemplateContainer().getItemTemplates();
        for ( ItemTemplate itemTemplate : its ) {
            if ( itemTemplate.hashCode() == code ) {
                return itemTemplate;
            }
        }

        return null;
    }

    public List<ItemTemplate> findByKeywords( List<String> keywords ) {
        List<ItemTemplate> its = getItemTemplateContainer().getItemTemplates();

        List<ItemTemplate> results = new ArrayList<ItemTemplate>();

        for ( ItemTemplate it : its ) {
            boolean matches = true;
            for ( String s : keywords ) {
                if ( !it.getKeywords().contains( s ) ) {
                    matches = false;
                    break;
                }
            }
            if ( matches ) {
                results.add( it );
            }
        }

        return results;
    }

    public ItemTemplate addItemTemplate( String shortDesc, String longDesc, String fullDesc, List<String> keywords, Integer w ) {
        ItemTemplate itemTemplate = ItemFactory.eINSTANCE.createItemTemplate();
        itemTemplate.setShortDesc( shortDesc );
        itemTemplate.setLongDesc( longDesc );
        itemTemplate.setFullDesc( fullDesc );
        itemTemplate.getKeywords().addAll( keywords );
        itemTemplate.setW( w );

        getItemTemplateContainer().getItemTemplates().add( itemTemplate );
        getChatoServer().getDatasource().save();

        return itemTemplate;
    }

    public ChatoServer getChatoServer() {
        return chatoServer;
    }

    public ItemTemplateContainer getItemTemplateContainer() {
        return itemTemplateContainer;
    }

}
